-
Notifications
You must be signed in to change notification settings - Fork 653
[rush] Upgrade pnpm-sync-lib to v0.3.3 for pnpm v10 compatibility
#5254
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[rush] Upgrade pnpm-sync-lib to v0.3.3 for pnpm v10 compatibility
#5254
Conversation
b31e5f2 to
2985261
Compare
|
@iclanton Could you please review my code? Thank you! |
e13d10a to
8790575
Compare
8790575 to
8055d31
Compare
|
@gavinxgu Any updates updates here? Would love to see pnpm 10 support land ❤️ |
…de-pnpm-sync-lib-to-0.3.3 # Conflicts: # apps/lockfile-explorer/package.json # apps/lockfile-explorer/src/utils/shrinkwrap.ts # common/config/rush/browser-approved-packages.json # common/config/subspaces/build-tests-subspace/pnpm-lock.yaml # common/config/subspaces/build-tests-subspace/repo-state.json # common/config/subspaces/default/common-versions.json # common/config/subspaces/default/pnpm-lock.yaml # common/config/subspaces/default/repo-state.json # libraries/rush-lib/package.json # libraries/rush-lib/src/logic/base/BaseInstallManager.ts # libraries/rush-lib/src/logic/pnpm/IPnpmfile.ts # libraries/rush-lib/src/logic/pnpm/PnpmShrinkWrapFileConverters.ts # libraries/rush-lib/src/logic/pnpm/PnpmShrinkwrapFile.ts # libraries/rush-sdk/package.json
…mplemented after this PR was started
| { | ||
| "packageName": "@rushstack/rush-pnpm-kit-v8", | ||
| "projectFolder": "libraries/rush-pnpm-kit-v8", | ||
| "reviewCategory": "libraries", | ||
| "shouldPublish": true | ||
| }, | ||
| { | ||
| "packageName": "@rushstack/rush-pnpm-kit-v9", | ||
| "projectFolder": "libraries/rush-pnpm-kit-v9", | ||
| "reviewCategory": "libraries", | ||
| "shouldPublish": true | ||
| }, | ||
| { | ||
| "packageName": "@rushstack/rush-pnpm-kit-v10", | ||
| "projectFolder": "libraries/rush-pnpm-kit-v10", | ||
| "reviewCategory": "libraries", | ||
| "shouldPublish": true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@iclanton @dmichon-msft I've fixed up this branch to incorporate the latest work from main. Let's try to get it merged.
Besides testing for regressions, the main thing we should consider is the 3 new NPM packages being created.
| options | ||
| // TODO: pnpm-sync-lib.d.ts was at some point generalized to support multiple lockfile formats, | ||
| // however its API still returns a single "ILockfile" that is incompatible with the newer interfaces | ||
| )) as ILockfile | null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At some point we need to update pnpm-sync-lib to handle this better. A simple solution is to treat ILockfile as unknown or just having the lockfileVersion member. (A complex solution is to depend on @rushstack/rush-pnpm-kit-v#.)
| { | ||
| "tagName": "@jsxImportSource", | ||
| "syntaxKind": "block" | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tiktok/pnpm-sync#40
tiktok/pnpm-sync#43
Summary
Upgrade
pnpm-sync-libto v0.3.3 for pnpm v10 compatibilityDetails
1. Upgrade pnpm-sync-lib to Version 0.3.3
Updated
package.jsonto upgrade pnpm-sync-lib from the previous version to 0.3.3, ensuring full compatibility with pnpm v10. This change builds upon the foundation established in tiktok/pnpm-sync#40 (pnpm v9 support) and tiktok/pnpm-sync#43 (pnpm v10 support).2. Adopt Official pnpm
readWantedLockfileMethodsIntegrated official pnpm methods in
BaseInstallManager.tsto support both v6 and v9 lockfile formats:This implementation provides backward compatibility while supporting the latest pnpm lockfile formats, with automatic detection based on lockfile version.
3. Enhanced Multi-Version pnpm Support
During the upgrade to pnpm v10, packages like
@pnpm/lockfile-fileand@pnpm/lockfile.fshave peer dependency requirements for@pnpm/logger, but these dependencies were not being properly satisfied, causing warnings or errors during installation.Solution Implementation
The solution leverages the
pnpm-kitarchitecture - a set of version-specific wrapper packages that encapsulate pnpm functionality for different pnpm versions. As part of this upgrade, three new rush-pnpm-kit packages were added (@rushstack/rush-pnpm-kit-v8,@rushstack/rush-pnpm-kit-v9, and@rushstack/rush-pnpm-kit-v10) to provide comprehensive support across pnpm versions. This modular approach allows Rush to support multiple pnpm versions simultaneously while ensuring proper dependency resolution.1. Adding @pnpm/logger as Direct Dependencies
@pnpm/loggerhas been added as a direct dependency in eachpnpm-kitpackage:libraries/rush-pnpm-kit-v8/package.json{ "dependencies": { "@pnpm/dependency-path-pnpm-v8": "npm:@pnpm/dependency-path@~2.1.8", "@pnpm/lockfile-file-pnpm-lock-v6": "npm:@pnpm/lockfile-file@~8.1.8", "@pnpm/logger": "~5.0.0" } }libraries/rush-pnpm-kit-v9/package.json{ "dependencies": { "@pnpm/dependency-path-pnpm-v9": "npm:@pnpm/dependency-path@~5.1.7", "@pnpm/lockfile.fs-pnpm-lock-v9": "npm:@pnpm/lockfile.fs@~1001.1.11", "@pnpm/logger": "~1001.0.0" } }libraries/rush-pnpm-kit-v10/package.json{ "dependencies": { "@pnpm/dependency-path-pnpm-v10": "npm:@pnpm/dependency-path@~1000.0.9", "@pnpm/lockfile.fs-pnpm-lock-v9": "npm:@pnpm/lockfile.fs@~1001.1.11", "@pnpm/logger": "~1001.0.0" } }2. Modular Encapsulation and Export
Each package exports similar modules with version-appropriate implementations:
3. Usage in Other Packages
In
libraries/rush-lib/src/logic/base/BaseInstallManager.ts, different kit versions are imported to handle different lockfile formats:How it was tested
Impacted documentation